স্প্রিং বুট (Spring Boot) ORM ব্যবহারের সময় এক্সসেপশন হ্যান্ডলিং (Exception Handling) এবং লগিং (Logging) গুরুত্বপূর্ণ ভূমিকা পালন করে। এই দুটি বিষয় আমাদের কোডে সমস্যাগুলোর দ্রুত সনাক্তকরণ ও সমাধান করতে সাহায্য করে।
এক্সসেপশন হ্যান্ডলিং (Exception Handling) স্প্রিং বুটে
স্প্রিং বুটের মধ্যে এক্সসেপশন হ্যান্ডলিং খুবই গুরুত্বপূর্ণ, কারণ এটি আপনাকে নিরাপদ এবং ব্যতিক্রম মোকাবেলা করার জন্য কার্যকর উপায় প্রদান করে। স্প্রিং বুটের জন্য বিভিন্ন ধরনের এক্সসেপশন হ্যান্ডলিং রয়েছে, যেমন:
কাস্টম এক্সসেপশন তৈরি করা
স্প্রিং বুটে আপনি কাস্টম এক্সসেপশন তৈরি করতে পারেন, যাতে সহজে নির্দিষ্ট সমস্যা শনাক্ত করা যায় এবং সেগুলোর জন্য বিশেষ ভাবে প্রতিক্রিয়া জানানো যায়।
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
@ControllerAdvice ব্যবহার করা
স্প্রিং বুটে এক্সসেপশন হ্যান্ডলিংয়ের জন্য @ControllerAdvice অ্যানোটেশন ব্যবহার করা হয়। এটি গ্লোবাল এক্সসেপশন হ্যান্ডলিংয়ের জন্য সাহায্য করে, যাতে পুরো অ্যাপ্লিকেশনের মধ্যে এক্সসেপশনগুলি একটি কেন্দ্রীয় স্থানে হ্যান্ডল করা যায়।
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@ResponseStatus ব্যবহার করা
আরেকটি উপায় হচ্ছে @ResponseStatus অ্যানোটেশন ব্যবহার করা। এটি নির্দিষ্ট HTTP স্টেটাস কোড সহ ব্যতিক্রমের জন্য দ্রুত প্রতিক্রিয়া প্রদান করতে সাহায্য করে।
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
স্প্রিং বুটে লগিং (Logging)
স্প্রিং বুট লগিংয়ের জন্য ডিফল্টভাবে SLF4J এবং Logback ব্যবহার করে। এই লগিং ফ্রেমওয়ার্কটি অত্যন্ত শক্তিশালী এবং কনফিগারেশন করা সহজ।
লগ তৈরি করা
স্প্রিং বুটে লগিং শুরু করার জন্য, আপনি প্রথমে SLF4J লোগার ব্যবহার করতে পারেন। উদাহরণ:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
public void someMethod() {
logger.info("This is an info log.");
logger.warn("This is a warning log.");
logger.error("This is an error log.");
}
}
লগ লেভেল কনফিগারেশন
স্প্রিং বুটের application.properties ফাইলে লগ লেভেল কনফিগার করা যেতে পারে। উদাহরণ:
logging.level.org.springframework=INFO
logging.level.com.example=DEBUG
এখানে, আপনি স্পেসিফিক প্যাকেজ বা ক্লাসের জন্য লগ লেভেল নির্ধারণ করতে পারেন।
Logback কনফিগারেশন
আপনি চাইলে logback-spring.xml ফাইলে লগ কনফিগারেশন করতে পারেন, যেখানে আপনি লগ আউটপুট ফরম্যাট, ফাইল লজিং, এবং অন্যান্য অপশন কনফিগার করতে পারবেন।
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
স্প্রিং বুটে এক্সসেপশন হ্যান্ডলিং এবং লগিং ব্যবহারের মাধ্যমে আপনার অ্যাপ্লিকেশন আরও স্থিতিশীল এবং ডিবাগিংয়ের জন্য উপযোগী হয়ে ওঠে। এর মাধ্যমে কোডের ত্রুটি শনাক্তকরণ এবং পরবর্তী সমস্যাগুলির সমাধান দ্রুত সম্ভব হয়।
স্প্রিং বুট (Spring Boot) একটি জনপ্রিয় জাভা ফ্রেমওয়ার্ক যা বিভিন্ন ধরনের অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। এটি বিশেষভাবে ORM (Object-Relational Mapping) এর জন্য উপযুক্ত, যা ডেটাবেসের টেবিল ও অবজেক্টের মধ্যে সম্পর্ক স্থাপন করে। এক্সসেপশন হ্যান্ডলিং (Exception Handling) একটি গুরুত্বপূর্ণ অংশ, কারণ এটি অ্যাপ্লিকেশন চলাকালীন সম্ভাব্য ত্রুটি সঠিকভাবে পরিচালনা করতে সাহায্য করে।
এক্সসেপশন হ্যান্ডলিং এর প্রয়োজনীয়তা
স্প্রিং বুট ORM অ্যাপ্লিকেশন তৈরি করার সময় এক্সসেপশন হ্যান্ডলিং কিছু কারণে গুরুত্বপূর্ণ:
ব্যবহারকারী অভিজ্ঞতা উন্নত করা
যখন অ্যাপ্লিকেশন কোনো ভুল পরিস্থিতির সম্মুখীন হয়, তখন ব্যবহারকারী যদি একটি পরিষ্কার এবং অর্থপূর্ণ বার্তা না পায়, তবে এটি একটি খারাপ অভিজ্ঞতা হতে পারে। সঠিক এক্সসেপশন হ্যান্ডলিং ব্যবহারের মাধ্যমে, ব্যবহারকারীকে যথাযথভাবে গাইড করা যায় এবং তারা জানতে পারে কীভাবে সমস্যাটি সমাধান করা যাবে।
ডিবাগিং এবং লগিং
যখন কোনো ত্রুটি ঘটে, তখন এক্সসেপশন হ্যান্ডলিং এর মাধ্যমে সঠিক লগ তৈরি করা যায়, যা ডিবাগিং প্রক্রিয়া সহজ করে তোলে। এটি ডেভেলপারদের জন্য দ্রুত সমস্যার উৎস চিহ্নিত করতে সাহায্য করে।
ডেটাবেস সংক্রান্ত ত্রুটির মোকাবিলা
ORM ব্যবহার করার সময় অনেক ধরনের ডেটাবেস ত্রুটি ঘটতে পারে, যেমন ডেটা ইনসার্ট বা আপডেটের সময় কনস্ট্রেইন্ট ভঙ্গ করা। স্প্রিং বুট ORM এ সঠিক এক্সসেপশন হ্যান্ডলিং ব্যবহারের মাধ্যমে এই ত্রুটিগুলো কার্যকরভাবে নিয়ন্ত্রণ করা সম্ভব হয়।
অ্যাপ্লিকেশন স্থিতিশীলতা
এক্সসেপশন হ্যান্ডলিং অ্যাপ্লিকেশনের স্থিতিশীলতা বজায় রাখে। কোনো ত্রুটি ঘটলে, অ্যাপ্লিকেশন ব্যর্থ না হয়ে প্রয়োজনীয় ব্যবস্থা গ্রহণ করতে পারে, যেমন ট্রানজেকশন রোলব্যাক বা ডেটাবেসে কোনো অস্থায়ী পরিবর্তন প্রতিরোধ করা।
এক্সসেপশন হ্যান্ডলিং এর কৌশল
স্প্রিং বুট ORM অ্যাপ্লিকেশনে এক্সসেপশন হ্যান্ডলিং এর কিছু কৌশল ব্যবহার করা যেতে পারে, যেমন:
@ControllerAdvice ব্যবহার করা
স্প্রিং বুট অ্যাপ্লিকেশনে গ্লোবাল এক্সসেপশন হ্যান্ডলিং করতে @ControllerAdvice ব্যবহার করা যায়। এটি একটি বিশেষ অ্যাডভাইস (advice) ক্লাস যা সমস্ত কন্ট্রোলারের জন্য এক্সসেপশন হ্যান্ডলিং করে।
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<String> handleEntityNotFound(EntityNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(DataIntegrityViolationException.class)
public ResponseEntity<String> handleDataIntegrityViolation(DataIntegrityViolationException ex) {
return new ResponseEntity<>("Data integrity violation", HttpStatus.BAD_REQUEST);
}
}
@ExceptionHandler ব্যবহার করা
প্রতিটি কন্ট্রোলারের মধ্যে নির্দিষ্ট এক্সসেপশন হ্যান্ডলিং করতে @ExceptionHandler ব্যবহার করা হয়। এটি নির্দিষ্ট এক্সসেপশন টাইপ ক্যাচ করে তাদের জন্য কাস্টম রেসপন্স প্রদান করে।
@ExceptionHandler(SQLException.class)
public ResponseEntity<String> handleSQLException(SQLException ex) {
return new ResponseEntity<>("Database error: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
ট্রানজেকশন রোলব্যাক
ডেটাবেসে কোনো সমস্যা হলে, স্প্রিং বুট ORM তে ট্রানজেকশন রোলব্যাক করার জন্য @Transactional অ্যানোটেশন ব্যবহার করা যায়।
@Transactional(rollbackFor = Exception.class)
public void updateData() throws Exception {
// some ORM operations
if (somethingWentWrong) {
throw new Exception("Something went wrong");
}
}
এক্সসেপশন হ্যান্ডলিং স্প্রিং বুট ORM অ্যাপ্লিকেশনগুলিতে খুবই গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনকে আরও নির্ভরযোগ্য এবং ব্যবহারকারী-বান্ধব করে তোলে। সঠিকভাবে এক্সসেপশন হ্যান্ডলিং ব্যবহার করলে, ডেভেলপাররা দ্রুত সমস্যাগুলি চিহ্নিত করতে এবং সঠিক সমাধান প্রদান করতে সক্ষম হন, এবং ব্যবহারকারীরা একটি স্থিতিশীল অ্যাপ্লিকেশন অভিজ্ঞতা পান।
স্প্রিং বুট অ্যাপ্লিকেশনে Exception Handling একটি গুরুত্বপূর্ণ ধারণা, যা অ্যাপ্লিকেশনের ভিতরের ত্রুটি বা সমস্যা সঠিকভাবে পরিচালনা করতে সহায়ক। স্প্রিং ফ্রেমওয়ার্কে, @ExceptionHandler এবং @ControllerAdvice ব্যবহার করে আপনি সহজেই ত্রুটির মোকাবিলা এবং কাস্টম ত্রুটি মেসেজ প্রদান করতে পারেন। এই দুটি টুল স্প্রিং MVC-এর মাধ্যমে কার্যকরীভাবে ত্রুটি পরিচালনা করতে ব্যবহৃত হয়।
@ExceptionHandler
@ExceptionHandler একটি স্প্রিং অ্যানোটেশন যা নির্দিষ্ট একটি এক্সেপশন টাইপের জন্য মেথডের মাধ্যমে এক্সেপশন হ্যান্ডলিং করে। এটি সাধারণত Controller ক্লাসের মধ্যে ব্যবহৃত হয় এবং নির্দিষ্ট এক্সেপশন ঘটলে ত্রুটি মেসেজ বা কাস্টম রেসপন্স রিটার্ন করে।
উদাহরণ:
ধরা যাক আমাদের একটি ProductController ক্লাস আছে, যেখানে কিছু ডেটাবেস সম্পর্কিত এক্সেপশন ঘটতে পারে। এই ধরনের এক্সেপশন হ্যান্ডল করার জন্য @ExceptionHandler ব্যবহার করা যায়।
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@GetMapping("/products")
public String getProducts() {
// একটি ইচ্ছাকৃত এক্সেপশন উদাহরণ হিসেবে
throw new ProductNotFoundException("Product not found");
}
@ExceptionHandler(ProductNotFoundException.class)
public String handleProductNotFoundException(ProductNotFoundException ex) {
return ex.getMessage(); // কাস্টম এক্সেপশন মেসেজ
}
}
এখানে, ProductNotFoundException নামক কাস্টম এক্সেপশন তৈরি করা হয়েছে এবং @ExceptionHandler দ্বারা এই এক্সেপশনটি ক্যাচ করে একটি মেসেজ রিটার্ন করা হয়েছে।
Custom Exception class:
public class ProductNotFoundException extends RuntimeException {
public ProductNotFoundException(String message) {
super(message);
}
}
এখন, যখন /products URL এ কেউ রিকোয়েস্ট পাঠাবে এবং ProductNotFoundException ঘটবে, তখন handleProductNotFoundException মেথডটি ক্যাচ করবে এবং কাস্টম মেসেজ দেখাবে।
@ControllerAdvice
@ControllerAdvice একটি গ্লোবাল এক্সেপশন হ্যান্ডলার হিসেবে কাজ করে যা সারা অ্যাপ্লিকেশনে যে কোনও কন্ট্রোলারের মধ্যে এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহার করা যেতে পারে। এটি সাধারণত এক্সেপশন হ্যান্ডলিংয়ের জন্য একটি সেন্ট্রাল পয়েন্ট হিসেবে কাজ করে।
উদাহরণ:
ধরা যাক, আমরা একটি কাস্টম এক্সেপশন হ্যান্ডলিং ক্লাস তৈরি করতে চাই যা সমস্ত কন্ট্রোলারের জন্য এক্সেপশন হ্যান্ডল করবে।
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ProductNotFoundException.class)
public ResponseEntity<String> handleProductNotFoundException(ProductNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGlobalException(Exception ex) {
return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
এখানে, @ControllerAdvice অ্যানোটেশন ব্যবহার করে আমরা একটি গ্লোবাল এক্সেপশন হ্যান্ডলার তৈরি করেছি যা পুরো অ্যাপ্লিকেশনে যেকোনো ProductNotFoundException বা সাধারণ Exception ক্যাচ করবে। এই ক্ষেত্রে, @ExceptionHandler ব্যবহৃত হয়েছে একটি বিশেষ এক্সেপশন ধরার জন্য।
ProductNotFoundException class:
public class ProductNotFoundException extends RuntimeException {
public ProductNotFoundException(String message) {
super(message);
}
}
এখন, যেকোনো কন্ট্রোলার, যেমন ProductController বা অন্য কোনো কন্ট্রোলারে যদি ProductNotFoundException ঘটতে থাকে, তাহলে এই গ্লোবাল এক্সেপশন হ্যান্ডলারটি সেই এক্সেপশনটি হ্যান্ডল করবে এবং একটি কাস্টম রেসপন্স প্রদান করবে।
@ExceptionHandler এবং @ControllerAdvice এর তুলনা
| বৈশিষ্ট্য | @ExceptionHandler | @ControllerAdvice |
|---|---|---|
| ব্যবহার | কেবল নির্দিষ্ট কন্ট্রোলারে এক্সেপশন হ্যান্ডল করার জন্য | গ্লোবাল এক্সেপশন হ্যান্ডলিং, সারা অ্যাপ্লিকেশন জুড়ে |
| অ্যানোটেশন ব্যবহার | কন্ট্রোলার মেথডে ব্যবহৃত | পুরো অ্যাপ্লিকেশন জুড়ে ব্যবহৃত |
| এক্সেপশন হ্যান্ডলিং | একটি নির্দিষ্ট এক্সেপশন টাইপ হ্যান্ডল করতে ব্যবহৃত | একাধিক কন্ট্রোলার এবং এক্সেপশন হ্যান্ডলিং করতে ব্যবহৃত |
| ব্যবহারযোগ্যতা | যখন শুধুমাত্র নির্দিষ্ট কন্ট্রোলারের জন্য এক্সেপশন হ্যান্ডল করতে হয় | যখন সেন্ট্রালাইজড এক্সেপশন হ্যান্ডলিং প্রয়োজন হয় |
সারসংক্ষেপ
- @ExceptionHandler এবং @ControllerAdvice স্প্রিং বুটের মধ্যে এক্সেপশন হ্যান্ডলিংয়ের দুটি গুরুত্বপূর্ণ কৌশল।
@ExceptionHandlerব্যবহার করে আপনি প্রতিটি কন্ট্রোলারে নির্দিষ্ট এক্সেপশন হ্যান্ডল করতে পারেন, যেখানে@ControllerAdviceগ্লোবাল এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়।- @ControllerAdvice হল একটি সেন্ট্রাল পয়েন্ট যা অ্যাপ্লিকেশনের যেকোনো কন্ট্রোলারের জন্য এক্সেপশন হ্যান্ডলিং পরিচালনা করে। এটি বড় অ্যাপ্লিকেশনে এক্সেপশন হ্যান্ডলিংকে আরও সহজ এবং পরিষ্কার করে।
স্প্রিং বুটে Exception Handling এবং Logging দুটি গুরুত্বপূর্ণ বিষয়, যা অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। Exception Handling অ্যাপ্লিকেশনে যেকোনো ত্রুটি বা ব্যতিক্রম সঠিকভাবে ট্র্যাক এবং হ্যান্ডেল করতে সাহায্য করে, এবং Logging ডেভেলপারদের অ্যাপ্লিকেশন চলাকালে ত্রুটি বা অন্যান্য গুরুত্বপূর্ণ তথ্য লগ করার জন্য সহায়ক।
Exception Handling in Spring Boot
Spring Boot-এ Exception Handling বেশ সহজ এবং কাস্টমাইজ করা যায়। Spring Framework-এ বিভিন্ন ধরনের exception handling এর উপায় রয়েছে, যার মধ্যে @ControllerAdvice, @ExceptionHandler, এবং ResponseEntityExceptionHandler ব্যবহার করা হয়।
১. @ExceptionHandler এনোটেশন
Spring MVC-তে @ExceptionHandler ব্যবহার করা হয় নির্দিষ্ট ধরনের exception হ্যান্ডেল করতে। এটি নির্দিষ্ট controller বা ক্লাসের মধ্যে ব্যবহৃত হয়।
উদাহরণ:
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleResourceNotFound(ResourceNotFoundException ex) {
return ex.getMessage();
}
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleGeneralException(Exception ex) {
return "An error occurred: " + ex.getMessage();
}
}
ব্যাখ্যা:
@ExceptionHandler(ResourceNotFoundException.class)ব্যবহার করা হয়েছেResourceNotFoundExceptionএর ক্ষেত্রে কাস্টম exception হ্যান্ডেল করতে।@ResponseStatus(HttpStatus.NOT_FOUND)দিয়ে HTTP স্টেটাস কোড 404 সেট করা হয়েছে।
২. কাস্টম Exception ক্লাস তৈরি করা
ধরা যাক, আপনি একটি কাস্টম exception তৈরি করতে চান, যেমন ResourceNotFoundException:
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
৩. Controller Example
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
if (id == 1L) {
return "User Found!";
} else {
throw new ResourceNotFoundException("User not found with ID: " + id);
}
}
}
Output:
- যখন
id1L হবে, তখন "User Found!" রিটার্ন হবে। - অন্য কোনো
idদিলেResourceNotFoundExceptionহ্যান্ডেল হবে এবং "User not found with ID: ..." এর বার্তা দেখাবে।
Logging in Spring Boot
Logging হচ্ছে একটি প্রক্রিয়া, যার মাধ্যমে অ্যাপ্লিকেশনের বিভিন্ন গুরুত্বপূর্ণ তথ্য লগ করা হয়, যেমন ডেটাবেস অপারেশন, ত্রুটি, API কল ইত্যাদি। Spring Boot ডিফল্টভাবে SLF4J (Simple Logging Facade for Java) এবং Logback লাইব্রেরি ব্যবহার করে।
১. Logback কনফিগারেশন (ডিফল্ট লগিং)
Spring Boot-এ application.properties ফাইলের মাধ্যমে লগিং কনফিগার করা হয়। ডিফল্টভাবে Spring Boot Logback ব্যবহার করে, এবং এতে বিভিন্ন লগিং স্তর যেমন DEBUG, INFO, WARN, এবং ERROR সমর্থিত।
application.properties:
# Set log level to INFO
logging.level.org.springframework=INFO
logging.level.com.example=DEBUG
২. লগ স্টেটমেন্ট যুক্ত করা
Spring Boot অ্যাপ্লিকেশনে Logger ক্লাস ব্যবহার করে লগ করা যায়। সাধারণত SLF4J API ব্যবহার করা হয়:
Logger ব্যবহার উদাহরণ:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@GetMapping("/logtest")
public String logTest() {
logger.info("Info level log");
logger.debug("Debug level log");
logger.error("Error level log");
return "Logging Example";
}
}
৩. বিভিন্ন লগ স্তরের ব্যবহার
- INFO: সাধারণ কার্যক্রম বা স্টেটাস সম্পর্কে তথ্য দেয়।
- DEBUG: ডেভেলপারদের জন্য ডিবাগ তথ্য দেয়।
- ERROR: কোনো ত্রুটি বা ব্যতিক্রম ঘটে তখন এই স্তরের লগ ব্যবহৃত হয়।
লগ ইনফরমেশন:
logger.info("Info level log");: অ্যাপ্লিকেশন চলার সময় সাধারণ কার্যক্রমের তথ্য লগ করবে।logger.debug("Debug level log");: ডেভেলপারদের জন্য বিস্তারিত তথ্য, যেমন ভেরিয়েবল মান বা স্টেটমেন্টের অবস্থান।logger.error("Error level log");: যখন কোনো ত্রুটি ঘটে, তখন লগ হবে।
Exception Handling এবং Logging একত্রে ব্যবহার
এখন ধরা যাক, আমরা একটি কন্ট্রোলারে Exception Handling এবং Logging একত্রে ব্যবহার করব। যখন কোনো ত্রুটি ঘটে, তখন আমরা লগে ত্রুটির বিস্তারিত তথ্যও রাখব।
উদাহরণ:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@GetMapping("/users/{id}")
public String getUser(Long id) {
if (id == null) {
throw new IllegalArgumentException("User ID cannot be null");
}
return "User Found!";
}
@ExceptionHandler(IllegalArgumentException.class)
public String handleIllegalArgumentException(IllegalArgumentException ex) {
logger.error("Exception occurred: {}", ex.getMessage());
return "Invalid input: " + ex.getMessage();
}
}
ব্যাখ্যা:
- যখন
getUser()মেথডেidnull হবে, তখনIllegalArgumentExceptionহবে। @ExceptionHandlerব্যবহার করে এই exception-টি হ্যান্ডেল করা হচ্ছে এবং লগে ত্রুটির বার্তা রাখা হচ্ছে।
সারাংশ
Spring Boot-এ Exception Handling এবং Logging ব্যবহারের মাধ্যমে অ্যাপ্লিকেশন ডেভেলপমেন্টে ডিবাগিং, ট্রাবলশুটিং এবং ট্র্যাকিং আরও সহজ হয়। @ExceptionHandler এবং @ControllerAdvice দিয়ে কাস্টম exception হ্যান্ডলিং করা যায়, এবং SLF4J ব্যবহার করে সহজেই অ্যাপ্লিকেশনের লগিং পরিচালনা করা সম্ভব। এই দুটি ফিচার মিলে অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং রক্ষণাবেক্ষণের উপযোগী করে তোলে।
Read more